package cn.rwklyd.BookKeeping.service;

import cn.rwklyd.BookKeeping.pojo.BudgetCategory;
import cn.rwklyd.BookKeeping.pojo.Result;
import cn.rwklyd.BookKeeping.pojo.vo.BudgetCategoryVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

public interface BudgetCategoryService extends IService<BudgetCategory> {
    
    /**
     * 添加预算分类
     * @param budgetCategory 预算分类信息
     * @return 添加结果
     */
    Result<String> addBudgetCategory(BudgetCategory budgetCategory);
    
    /**
     * 删除预算分类
     * @param id 预算分类ID
     * @return 删除结果
     */
    Result<String> deleteBudgetCategory(Long id);
    
    /**
     * 更新预算分类
     * @param budgetCategory 预算分类信息
     * @return 更新结果
     */
    Result<String> updateBudgetCategory(BudgetCategory budgetCategory);
    
    /**
     * 根据ID获取预算分类
     * @param id 预算分类ID
     * @return 预算分类信息
     */
    Result<BudgetCategory> getBudgetCategoryById(Long id);
    
    /**
     * 根据预算ID查询预算分类列表（分页）
     * @param budgetId 预算ID
     * @param page 页码
     * @param pageSize 每页大小
     * @return 预算分类列表
     */
    Result<IPage<BudgetCategory>> listBudgetCategories(Long budgetId, Integer page, Integer pageSize);
    
    /**
     * 根据预算ID查询预算分类列表（分页），并包含本月消费总额
     * @param budgetId 预算ID
     * @param page 页码
     * @param pageSize 每页大小
     * @return 预算分类列表和本月消费总额
     */
    Result<IPage<BudgetCategoryVO>> listBudgetCategoriesWithExpense(Long budgetId, Integer page, Integer pageSize);
} 